{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tushare as ts  \n",
    "import pandas as pd  \n",
    "from sqlalchemy import create_engine  \n",
    "import sqlalchemy\n",
    "import mysql.connector\n",
    "try:\n",
    "    conn = mysql.connector.connect(user='diagnose_report', password='launch@1234',\n",
    "                                   host='rm-wz9v9e07mh753tk321o.mysql.rds.aliyuncs.com',\n",
    "                                   database='car_spider')\n",
    "except mysql.connector.Error as err:\n",
    "    if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:\n",
    "        print(\"Something is wrong with your user name or password\")\n",
    "    elif err.errno == errorcode.ER_BAD_DB_ERROR:\n",
    "        print(\"Database does not exist\")\n",
    "    else:\n",
    "        print(err)\n",
    "cursor = conn.cursor()\n",
    "cursor.execute(\"select title,update_time,price,place,mileage,sale_time,color,type,changes,detail from daydayup_spider\")\n",
    "results = cursor.fetchall()\n",
    "car2 = pd.DataFrame(results,columns=['title','update_time','price','place','mileage','sale_time','color','type','changes','detail'])\n",
    "conn.commit()\n",
    "cursor.close()\n",
    "conn.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tushare as ts  \n",
    "import pandas as pd  \n",
    "from sqlalchemy import create_engine  \n",
    "import sqlalchemy\n",
    "import mysql.connector\n",
    "try:\n",
    "    conn = mysql.connector.connect(user='diagnose_report', password='launch@1234',\n",
    "                                   host='rm-wz9v9e07mh753tk321o.mysql.rds.aliyuncs.com',\n",
    "                                   database='car_spider')\n",
    "except mysql.connector.Error as err:\n",
    "    if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:\n",
    "        print(\"Something is wrong with your user name or password\")\n",
    "    elif err.errno == errorcode.ER_BAD_DB_ERROR:\n",
    "        print(\"Database does not exist\")\n",
    "    else:\n",
    "        print(err)\n",
    "cursor = conn.cursor()\n",
    "\n",
    "cursor.execute(\"select `factory`,`brand`,`style`,`style_1`,`厂商指导价`,`长×宽×高[mm]`,`轴距[mm]`,`整备质量[kg]`,`engine_displacement`,`最大功率[kW]` from car_price_detail\")\n",
    "results = cursor.fetchall()\n",
    "price1 = pd.DataFrame(results,columns=['factory','brand','style','style_1','厂商指导价','长×宽×高[mm]','轴距[mm]','整备质量[kg]','engine_displacement','最大功率[kW]'])\n",
    "cursor.execute(\"select `厂商`,`品牌`,`车系`,`车型`,`厂商指导价`,`长×宽×高[mm]`,`轴距[mm]`,`整备质量[kg]`,`排量(mL)`,`最大功率[kW]` from car_price_detail_stop\")\n",
    "results = cursor.fetchall()\n",
    "price2 = pd.DataFrame(results,columns=['factory','brand','style','style_1','厂商指导价','长×宽×高[mm]','轴距[mm]','整备质量[kg]','engine_displacement','最大功率[kW]'])\n",
    "cursor.execute(\"select `厂商`,`品牌`,`车系`,`车型`,`厂商指导价`,`长×宽×高[mm]`,`轴距[mm]`,`整备质量[kg]`,`排量(mL)`,`最大功率[kW]` from car_price_detail_stop_1\")\n",
    "results = cursor.fetchall()\n",
    "price3 = pd.DataFrame(results,columns=['factory','brand','style','style_1','厂商指导价','长×宽×高[mm]','轴距[mm]','整备质量[kg]','engine_displacement','最大功率[kW]'])\n",
    "\n",
    "price=price1\n",
    "price = price.append(price2)\n",
    "price = price.append(price3)\n",
    "conn.commit()\n",
    "cursor.close()\n",
    "conn.close()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# price 数据转化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "metadata": {},
   "outputs": [],
   "source": [
    "price['detail'] = price['style_1'].apply(lambda x:x.replace(x.split(' ')[0],''))\n",
    "price['year_type'] = price['style_1'].apply(lambda x:int(x.split('款')[0]))\n",
    "price['price'] = price['厂商指导价'].apply(lambda x:float(x.split('万')[0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 去除NoneType，转化price"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "car2['title'] = car2['title'].fillna('sss')\n",
    "car2 = car2[car2['title']!='sss']\n",
    "car2['price'] =car2['price'].apply(lambda x :float(x.split('万')[0]))\n",
    "\n",
    "def fliter_None(x):\n",
    "    result = 0\n",
    "    if x=='-':\n",
    "        result = None\n",
    "    else:\n",
    "        result = float(x)\n",
    "    return result\n",
    "car2['mileage'] = car2['mileage'].apply(lambda x:fliter_None(x.split('万')[0]))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 过滤不合格数据，提取品牌，车型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:3: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  This is separate from the ipykernel package so we can avoid doing imports until\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:4: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  after removing the cwd from sys.path.\n"
     ]
    }
   ],
   "source": [
    "car2['flag'] = car2['title'].apply(lambda x:len(x.split(' ')[1].split('\\xa0')))\n",
    "car2_1 = car2[car2['flag']>2]\n",
    "car2_1['brand'] = car2_1['title'].apply(lambda x:x.split(' ')[1].split('\\xa0')[0])\n",
    "car2_1['type'] = car2_1['title'].apply(lambda x:x.split(' ')[1].split('\\xa0')[0]+' '+x.split(' ')[1].split('\\xa0')[1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 过滤不合格数据，提取车辆年款"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:3: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  This is separate from the ipykernel package so we can avoid doing imports until\n",
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:5: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  \"\"\"\n"
     ]
    }
   ],
   "source": [
    "\n",
    "import re\n",
    "car2_1['flag']=car2_1['title'].apply(lambda x:len(re.findall(\"20[0-9]{2}\",x)))\n",
    "car2_temp = car2_1[car2_1['flag']!=0]\n",
    "car2_temp['year_type'] = car2_temp['title'].apply(lambda x:int(re.findall(\"20[0-9]{2}\",x)[0]))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 过滤不合格数据，提取上牌年份"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    }
   ],
   "source": [
    "car2_temp['flag'] = car2_temp['sale_time'].apply(lambda x:len(x.split('-')[0]))\n",
    "car2_temp = car2_temp[car2_temp['flag']==4]\n",
    "car2_temp['sale_year'] = car2_temp['sale_time'].apply(lambda x:int(x.split('-')[0]))\n",
    "car2_temp['flag'] = car2_temp['sale_year'] -car2_temp['year_type']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [],
   "source": [
    "car2_temp = car2_temp[car2_temp['flag']<2]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 转换买的时间和交易时间差"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "from datetime import datetime \n",
    "car2_temp['update_time'] = car2_temp['update_time'].apply(lambda x:datetime.strptime(x,\"%Y年%m月%d日成交\"))\n",
    "car2_temp['sale_time'] = car2_temp['sale_time'].apply(lambda x:datetime.strptime(x,\"%Y-%m\"))\n",
    "car2_temp['time_subtract']=car2_temp['update_time']-car2_temp['sale_time']\n",
    "car2_temp['time_subtract']=car2_temp['time_subtract'].apply(lambda x:x.days/365)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 行驶里程和价格关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x216b2668>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt  # Matlab-style plotting\n",
    "fig, ax = plt.subplots()\n",
    "aodi = car2_temp[car2_temp['type']=='大众 帕萨特']\n",
    "ax.scatter(x = aodi['mileage'], y = aodi['price'])\n",
    "plt.ylabel('%', fontsize=13)\n",
    "plt.xlabel('year', fontsize=13)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 使用时长与价格关系"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 192,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x24e75e10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "from sklearn import linear_model, datasets\n",
    "X = aodi['time_subtract'].values.reshape(len(aodi['time_subtract'].values),1)\n",
    "y = aodi['price'].values\n",
    "ransac = linear_model.RANSACRegressor()\n",
    "ransac.fit(X, y)\n",
    "line_y_ransac = ransac.predict(X)\n",
    "plt.plot(X, line_y_ransac, color='cornflowerblue', linewidth=2,label='RANSAC regressor')\n",
    "plt.scatter(X, y, color='yellowgreen', marker='.',label='Inliers')\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 196,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.73800309, 0.67983557, 0.62166804])"
      ]
     },
     "execution_count": 196,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ransac.predict([[1],[2],[3]])/22"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 141,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:1: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    }
   ],
   "source": [
    "aodi['name'] = aodi['title'].apply(lambda x:x.split('\\xa0')[2])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 名称归一化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:3: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  This is separate from the ipykernel package so we can avoid doing imports until\n"
     ]
    }
   ],
   "source": [
    "result = list(price[price['style']=='帕萨特']['style_1'].values)\n",
    "from fuzzywuzzy import process\n",
    "aodi['best_name'] = aodi['name'].apply(lambda x:process.extractOne(x, result)[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 145,
   "metadata": {},
   "outputs": [],
   "source": [
    "aodi_1 = aodi[['price','mileage','flag','time_subtract', 'best_name']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['title', 'update_time', 'price', 'place', 'mileage', 'sale_time',\n",
       "       'color', 'type', 'changes', 'detail', 'flag', 'brand', 'year_type',\n",
       "       'sale_year', 'time_subtract', 'name', 'best_name'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 144,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "aodi.columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 原价连接"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 148,
   "metadata": {},
   "outputs": [],
   "source": [
    "aodi_price = price[price['style']=='帕萨特']\n",
    "aodi_price = aodi_price[['style_1','price']]\n",
    "aodi_1.columns = ['price_dail','mileage','flag','time_subtract', 'style_1']\n",
    "result = pd.merge(aodi_1,aodi_price,on=['style_1'],how = 'left')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 202,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)"
      ]
     },
     "execution_count": 202,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn import linear_model, datasets\n",
    "X = result[['mileage', 'time_subtract', 'price']]\n",
    "y = result['price_dail'].values.ravel()\n",
    "#ransac = linear_model.RANSACRegressor()\n",
    "ransac = linear_model.LinearRegression()\n",
    "ransac.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 229,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3.8211479])"
      ]
     },
     "execution_count": 229,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ransac.predict(pd.DataFrame([100,5,28]).transpose())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "metadata": {},
   "outputs": [],
   "source": [
    "name_list = {}\n",
    "for a,b in price[price['style']=='帕萨特'].groupby(['year_type']):\n",
    "    name_list[a] = list(b['style_1'].values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
